package thread;

import java.util.Random;

/** 实现多线程数组求和.
 *  给定一个很长的数组 (长度 1000w), 通过随机数的方式生成 1-100 之间的整数.
 *  实现代码, 能够创建 两个线程, 对这个数组的所有元素求和.
 *  其中线程 1 计算偶数下标元素的和, 线程 2 计算奇数下标元素的和.
 *  最终再汇总两个和, 进行相加
 *  记录程序的执行时间.
 */
public class Demo1 {
    static int sum1=0;
    static int sum2=0;
    public static void main(String[] args) {
        // 开始计时
        long beg = System.currentTimeMillis();
        // 建立数组
        int[] arr = new int[1000_0000];
        Random ran = new Random();
        for (int i = 0; i < arr.length; i++) {
            arr[i] = (ran.nextInt(100) + 1); // [0-99]+1 = [1-100]
        }
        // 创建2个线程
        Thread t1 = new Thread(() -> { // 计算偶数
            int sum1 = 0;
            for (int i = 0; i < arr.length; i+=2) {
                sum1 += arr[i];
            }
            System.out.println("线程1偶数下标的和：" + sum1);
        });
        Thread t2 = new Thread(() -> { // 计算奇数
            int sum2 = 0;
            for (int i = 1; i < arr.length; i+=2) {
                sum2 += arr[i];
            }
            System.out.println("线程2奇数下标的和：" + sum2);
        });

        t1.start();
        t2.start();

        try {
            t1.join();
            t2.join(); // 此处的 join 就是让当前的 main 线程来等待 t 线程执行结
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        // 结束计时
        long end = System.currentTimeMillis();
        System.out.println("结果："+(sum1+sum2));
        System.out.println("执行时间：" + (end - beg) + "ms");

    }
}
